Dotaz k osvetleni struktury MESSAGE
Otázka od: Petr Vařeka
16. 10. 2002 19:01
Zdravim konferu.
V dokumentaci jsem nalezl, ze MESSAGE je record s nasl. variantni
strukturou:
type
TMessage =packedrecord
Msg: Cardinal;
case Integer of
0: (
WParam: Longint;
LParam: Longint;
Result: Longint);
1: (
WParamLo: Word;
WParamHi: Word;
LParamLo: Word;
LParamHi: Word;
ResultLo: Word;
ResultHi: Word);
end;
Je zrejme, ze tato struktura je zavisla na tom, zda jiste pole nabyva
hodnoty 0 ci 1.
Prosim sdelte mi, ktere to je pole - z dokumentace jsem to totiz vubec
nepochopil.
Petr Vareka.
Odpovedá: Tomas Grepl
16. 10. 2002 22:22
> V dokumentaci jsem nalezl, ze MESSAGE je record s nasl. variantni
> strukturou:
> type
> TMessage =packedrecord
> Msg: Cardinal;
> case Integer of
> 0: (
> WParam: Longint;
> LParam: Longint;
> Result: Longint);
> 1: (
> WParamLo: Word;
> WParamHi: Word;
> LParamLo: Word;
> LParamHi: Word;
> ResultLo: Word;
> ResultHi: Word);
> end;
> Je zrejme, ze tato struktura je zavisla na tom, zda jiste pole nabyva
> hodnoty 0 ci 1.
> Prosim sdelte mi, ktere to je pole - z dokumentace jsem to totiz vubec
> nepochopil.
Hodnoty 0 a 1 jsou tam pouze symbolicky, klidne by tam slo napsat i jakakoli
jina cisla a nic by se nezmenilo (program musi nejak jinak urcit, kterou
variantu ma v dane chvili pouzit) .
Pokud by tam bylo case Neco:integer of, tak by to Neco zabralo i nejake
bajty, ale takto jde pouze o formalni zapis ruznych variant.
Proste bud TMessage pouzivas jako.
TMessage =packed record
Msg: Cardinal;
WParam: Longint;
LParam: Longint;
Result: Longint;
end
nebo jako
TMessage =packed record
Msg: Cardinal;
WParamLo: Word;
WParamHi: Word;
LParamLo: Word;
LParamHi: Word;
ResultLo: Word;
ResultHi: Word;
end;
Lze to ale klidne i kombinovat.
Napr. Msg.WParamHi + Msg.LParam + Msg.WParam.
Udaje se v pameti fyzicky prekryvaji. Tzn. pokud zmenim WParam (4 byty), tak
se soucasne zmeni i WParamLo (2 byty) a WParamHi (2 byty) a plati to
samozrejme i obracene.
Tomas